import random

class jogo:
	
	def __init__(self,linha,coluna,qtd_bombas):
		
		self.linha = linha
		self.coluna = coluna
		self.qtd_bombas = qtd_bombas
		self.pos_bomba = []
		self.matriz = [coluna*[0] for i in range(linha)]
		self.matriz_blit = [coluna*[9] for i in range(linha)]
		self.bomba = "*"
		self.contador = 0
		
		self.criajogo()
	
	def criajogo(self):
		qtd_bombas = self.qtd_bombas
		
		while qtd_bombas > 0:
			i = random.randint(0,self.linha-1)
			j = random.randint(0,self.coluna-1)
			self.pos_bomba.append((j,i))
			if self.matriz[i][j] != "*":
				self.matriz[i][j] = "*"
				valida_i = i-1
				valida_j = j-1
				if valida_i < 0:
					valida_i = "broken" # se ele tentar concatenar str com int da erro e ele pula pra o proximo passo
				if valida_j < 0:
					valida_j = "broken"
				try:
					self.matriz[valida_i][valida_j] += 1
				except:
					pass
				try:
					self.matriz[i][valida_j] += 1
				except:
					pass
				try:
					self.matriz[i+1][valida_j] += 1
				except:
					pass
				try:
					self.matriz[valida_i][j] += 1
				except:
					pass
				try:
					self.matriz[valida_i][j+1] += 1
				except:
					pass
				try:
					self.matriz[i][j+1] += 1
				except:
					pass
				try:
					self.matriz[i+1][j+1] += 1
				except:
					pass
				try:
					self.matriz[i+1][j] += 1
				except:
					pass
				qtd_bombas -= 1
			


	
	
	def percorre(self,celula):
		if self.matriz[celula[0]][celula[1]] == 0:
	
			visitados = []
			pilha = []
			pilha.append(celula)

			while len(pilha) > 0:
				proximo = pilha.pop()
				visitados.append(proximo)
				i = proximo[0]
				j = proximo[1]
				try:
					valida_i = i-1
				except : pass
				try:
					valida_j = j-1
				except: pass
							
				if valida_i < 0:
					valida_i = "broken" # se ele tentar concatenar str com int da erro e ele pula pra o proximo passo
				
				if valida_j < 0:
					valida_j = "broken"		
													
							
				try:
					if self.matriz_blit[valida_i][valida_j] == 9: 
						self.matriz_blit[valida_i][valida_j] = self.matriz[valida_i][valida_j]
						self.contador +=1
					if self.matriz[valida_i][valida_j] == 0 and (i,j) not in visitados :
						pilha.append((valida_i,valida_j))
				except:
					pass
				
				try:
					if self.matriz_blit[valida_i][j] == 9:
						self.matriz_blit[valida_i][j] = self.matriz[valida_i][j]
						self.contador +=1
					if self.matriz[valida_i][j] == 0 and (valida_i,j) not in visitados :
						pilha.append((valida_i,j))
				except:
					pass
				
				try:
					if self.matriz_blit[valida_i][j+1] == 9:
						self.matriz_blit[valida_i][j+1] = self.matriz[valida_i][j+1]
						self.contador +=1
					if self.matriz[valida_i][j+1] == 0 and (valida_i,j+1) not in visitados :
						pilha.append((valida_i,j+1))
				except:
					pass
				
				try:
					if self.matriz_blit[i][valida_j] == 9:
						self.matriz_blit[i][valida_j] = self.matriz[i][valida_j]
						self.contador +=1
					if self.matriz[i][valida_j] == 0 and (i,valida_j) not in visitados :
						pilha.append((i,valida_j))
				except:
					pass
				
				try:
					if self.matriz_blit[i][j] == 9:
						self.matriz_blit[i][j] = self.matriz[i][j]
						self.contador +=1
					if self.matriz[i][j] == 0 and (i,j) not in visitados :
						pilha.append((i,j))
				except:
					pass
				
				try:
					if self.matriz_blit[i][j+1] == 9:
						self.matriz_blit[i][j+1] = self.matriz[i][j+1]
						self.contador +=1
					if self.matriz[i][j+1] == 0 and (i,j+1) not in visitados :
						pilha.append((i,j+1))
				except:
					pass
				
				try:
					if self.matriz_blit[i+1][valida_j] == 9:
						self.matriz_blit[i+1][valida_j] = self.matriz[i+1][valida_j]
						self.contador +=1
					if self.matriz[i+1][valida_j] == 0 and (i+1,valida_j) not in visitados :
						pilha.append((i+1,valida_j))
					
				except:
					pass
				
				try:
					if self.matriz_blit[i+1][j] == 9:
						self.matriz_blit[i+1][j] = self.matriz[i+1][j]
						self.contador +=1
					if self.matriz[i+1][j] == 0 and (i+1,j) not in visitados :
						pilha.append((i+1,j))
						
				except:
					pass
				
				try:
					if self.matriz_blit[i+1][j+1] == 9:
						self.matriz_blit[i+1][j+1] = self.matriz[i+1][j+1]
						self.contador +=1
					if self.matriz[i+1][j+1] == 0 and (i+1,j+1) not in visitados :
						pilha.append((i+1,j+1))
				except:
					pass
		else:
			if self.matriz_blit[celula[0]][celula[1]] == 9:
				self.matriz_blit[celula[0]][celula[1]] = self.matriz[celula[0]][celula[1]]
				self.contador +=1
